home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / PRGMANIA / VERSION1.5 / WINDGEM.DOC < prev    next >
Encoding:
Text File  |  1996-12-27  |  41.8 KB  |  1,299 lines

  1.  
  2.                 WindGem 1.5 décembre 1996
  3.                 -----------
  4.         Librairie Gem Etendue pour le SozobonX C.
  5.         (Utiliser une tabulation de 8 caractères)
  6.  
  7. <=-----------------------------------------------------------------------=>
  8.         SOMMAIRE
  9.         
  10.         1> Introduction et remerciements
  11.         2> Système requis
  12.         3> Installation
  13.         4> Utilisation
  14.         5> Fonctionnalités
  15.           5.1> Types étendus pour les fichiers .RSC
  16.           5.2> Variables de la librairie
  17.           5.3> Fonctions de la librairie
  18.             5.3.1>  AjouteAide
  19.             5.3.2>  AjouteMenu
  20.             5.3.3>  AjoutePopup
  21.             5.3.4>  AjouteToolBar
  22.             5.3.5>  AppInit
  23.             5.3.6>  AppExit
  24.             5.3.7>  EffaceChamp
  25.             5.3.8>  EnleveMenu
  26.             5.3.9>  EnleveToolBar
  27.             5.3.10> EventMulti
  28.             5.3.11> FormAlert
  29.             5.3.12> GetCoord
  30.                 5.3.13> GetHandle
  31.             5.3.14> GetObjet
  32.             5.3.15> GetObject
  33.             5.3.16> GetValeur
  34.             5.3.17> GetVar
  35.             5.3.18> GetWindText
  36.             5.3.19> GetWorkXYWH
  37.             5.3.20> PopMenu
  38.             5.3.21> pop_up
  39.             5.3.22> ObjcUnselect
  40.             5.3.23> SetSlider
  41.             5.3.24> SetValeur
  42.             5.3.25> SetWindText
  43.             5.3.26> StGuide
  44.             5.3.27> ToolBarSelect
  45.             5.3.28> ToolBarUnselect
  46.             5.3.29> WindAlerte
  47.             5.3.30> WindClose
  48.             5.3.31> WindDelete
  49.             5.3.32> WindDraw
  50.             5.3.33> WindFormInit
  51.             5.3.34> WindOpen
  52.             5.3.35> WindTextInit
  53.             5.3.36> WindUserInit
  54.             5.3.37> wmenu_icheck
  55.           5.4> Fonctions utilitaires diverses
  56.             5.4.1>  convdate
  57.             5.4.2>  cre_fichier
  58.             5.4.3>  EnvoiRedraw
  59.              5.4.4>  exist
  60.             5.4.5>  extention
  61.             5.4.6>  get_text
  62.             5.4.7>  GetCharSize
  63.             5.4.8>  GetDeskXYWH
  64.             5.4.9>  GetVideoRes
  65.             5.4.10> litdate
  66.             5.4.11> Sauvegarde / Restauration d'une zone de l'écran
  67.             5.4.12> selector
  68.             5.4.13> set_text
  69.             5.4.14> strcomplete
  70.             5.4.15> strcopy
  71.             5.4.16> strinsert
  72.             5.4.17> strleft
  73.             5.4.18> strmid
  74.             5.4.19> strnpcpy
  75.             5.4.20> strright
  76.             5.4.21> trim
  77.           5.5> Conclusion
  78.  
  79.         6> Evolutions futures
  80.         7> Retours
  81.  
  82.                 
  83. <=-----------------------------------------------------------------------=>
  84. 1> Introduction
  85.  
  86.     Il existe dans le domaine public de nombreuses librairies GEM
  87. permettant d'en étendre ses foncionnalités.
  88.  
  89.     Malheureusement, aucune n'a été portée pour le SozobonX C.
  90.  
  91.     Après une tentative de portage de la librairie Egem220 qui n'a
  92. abouti à rien de réellement fonctionnel, j'ai décidé d'écrire la mienne.
  93.  
  94.     Evidemment, elle est loin d'offrir toutes les fonctionnalités d'une
  95. librairie comme Egem ou encore Big ou Eglib. Cependant, elle offre le
  96. minimum nécessaire pour gérer les formulaires en fenêtres de manière modale
  97. ou non et ce, de la manière la plus simple possible à utiliser.
  98.  
  99.     Je remercie Claude Attard pour ses articles dans St-Magazine et 
  100. tous ceux qui m'ont aidé à réaliser cette librairie en répondant à mes 
  101. questions dans les News ou par Email ou tout simplement en testant cette 
  102. librairie.
  103.  
  104.  
  105. <=-----------------------------------------------------------------------=>
  106. 2> Système requis
  107.  
  108.     Cette librairie devrait pouvoir fonctionner sur toutes la gamme,
  109. dans la mesure où je n'utilise aucune spécificité d'une quelconque version
  110. de l'AES (à l'exception de l'icônification pour les systèmes la supportant).
  111.     Je l'ai testé sur un 1040 Stf TOS 1.2, mon Falcon 030 TOS 4.4, et
  112. sur mon Falcon sous Magic 4.
  113.     Olivier Landemarre la teste régulièrement sous Magic Mac et je l'en
  114. remercie.
  115.  
  116.     Pour un fonctionnement optimum, il vaut mieux travailler avec une
  117. résolution >= 640*400 (les objets userdefs sont affichés en 16*16 pixels).
  118. Le nombre de couleurs importe peu.
  119.  
  120.  
  121. <=-----------------------------------------------------------------------=>
  122. 3> Installation
  123.  
  124.     Il suffit de copier windgem.h, aes.h et vdi.h dans le répertoire 
  125. INCLUDE du sozobonX C et WindGem.a dans le repertoire LIB/SOZOBONX.
  126. Faire de même pour les librairies annexes.
  127.  
  128.  
  129. <=-----------------------------------------------------------------------=>
  130. 4> Utilisation
  131.  
  132.     Vous devez inclure WindGem.h dans vos sources et ajouter windGem.a 
  133. dans la liste des librairies à l'édition de lien.
  134.  
  135.     Le plus simple est d'utiliser un fichier Makefile dans la mesure où
  136. le nombre de paramètres de compilation est assez important.
  137.  
  138.     Un exemple valant plus qu'un long discours, en voici un :
  139.  
  140.                 **********
  141.  
  142. test: test.c test.h
  143.     cc -otest.app -O -f test.c windgem xaesfast xvdifast -lpml -lextra
  144.  
  145.     * -o<nomProg>
  146.     * -O optimiseur
  147.     * -f pour les fonctions en virgule flottante,
  148.     * windgem[.a] doit être la PREMIERE librairie appelée,
  149.     * Xaesfast / Xvdifast pour les fonctions Gem,
  150.     * -lpml pour inclure les fonctions virgules flottantes utilisées.
  151.     * -lextra pour la fonction Getcookie
  152.  
  153. NOTE : pour une version inférieure à la release 15 (octobre/novembre 1995),
  154. qui ne contiendrait pas la librairie PML, utiliser -lm à la place de -f et
  155. supprimer -lpml.
  156.  
  157.     En complément, d'autres fichiers d'entête sont fournis avec WindGem.
  158.  
  159.     * xgemfast.h    - version très légèrement modifier de celui qui est
  160.                       fourni avec le Sozobon C
  161.                       Modification :
  162.                       * Ajout de la structure GEMPARBLK
  163.                       * définition de ED_START, ED_INIT, ED_CHAR, ED_END
  164.                         pour compatibilité Pure C.
  165.                       * Modification de la structure OB_SPEC
  166.     * aes.h        - prototype des fonctions de l'aes
  167.     * vdi.h        - prototype des fonctions du vdi
  168.     * falcon30.h    - macros permettant d'utiliser les nouvelles
  169.                           fonctions du Falcon 030.
  170.     * scancode.h    - code SCAN + ASCII des combinaisons de touches
  171.                       spéciales (CONTROL, ALTERNATE) du clavier.
  172.     * vt52.h    - macros permettant d'utiliser les fonctions de
  173.                       l'émulateur VT52
  174.     * s_malloc.h    - prototype des fonctions de la librairie S_MALLOC
  175.     * dragdrop.h    - prototype des fonctions de la librarie Drag&Drop
  176.     * atarierr.h    - code d'erreur atari : normalement idem errno.h
  177.  
  178.  
  179. <=-----------------------------------------------------------------------=>
  180. 5> Fonctionnalités
  181.  
  182. 5.1> Types étendus pour les fichiers .RSC
  183.  
  184.     Pour ce faire, il vous faudra un éditeur de ressources capable de
  185. modifier ce paramètre comme Orcs ou Interface.
  186.  
  187.     Les valeurs à employer sont les suivantes :
  188.  
  189. Pour raccourcis clavier :
  190.     UNDER_B        18 + [ devant la lettre concernée 
  191.  
  192. Petite écriture :
  193.     SMALL_B        22
  194.  
  195. Boutons PopUp :
  196.     POPUP_B        24
  197.  
  198. Radio-Boutons :
  199.     RADIO_B        26
  200.  
  201. Check-Box :
  202.     CHECK_B        28
  203.  
  204. Group-Box :
  205.     GROUP_B        30
  206.     
  207.     Elles ne sont pour l'instant valables QUE pour des objets de type
  208. BUTTON et NON cumulables, mais j'essaierai d'améliorer ce fonctionnement 
  209. par la suite.
  210.  
  211.  
  212. Note concernant les popup menus.
  213.  
  214.     Les objets appartenant aux arbres d'objets servant de popup menus
  215. doivent être SELECTABLE pour être utilisables. Les items DISABLED ne sont
  216. pas pris en compte.
  217. Depuis la version 1.4, les objets POPUP_B sont des objets Userdefs (ajout
  218. d'un icône à droite du bouton pour obtenir l'option suivante...). Il faut 
  219. bien penser à ne pas coller les boutons POPUP_B tout contre le bord d'un
  220. formulaire (besoin de 16*16 pixels pour l'icône). Utiliser la fonction
  221. <AjoutePopup> pour associer un popup à un objet d'un formulaire (après
  222. initilisation du formulaire avec WindFormInit !). Pour plus d'information,
  223. se référer à l'exemple <test.c>.
  224.  
  225.  
  226. 5.2> Variables de la librairie
  227.  
  228.     Liste des variables mises à la disposition du programmeur :
  229.  
  230.     - VdiHandle,
  231.     - AppId,
  232.     - Ordi,
  233.     - CurWindow,
  234.     - AdrMenu,
  235.     - AdrDesk.
  236.  
  237.     * VdiHandle contient le handle VDI associé à l'application. Il est
  238. ainsi possible d'utiliser n'importe quelle fonction du VDI (dans les 
  239. fenêtres "utilisateurs" par exemple).
  240.  
  241.     * AppId contient le numéro de l'application récupéré par <appl_init>.
  242.  
  243.     * Ordi est une structure contenant un certain nombre d'informations
  244. concernant la machine et son système.
  245.     Elle est composée comme suit :
  246.  
  247. typedef    struct
  248. {
  249.     int    Processor;        /* Processor type                */
  250.     long    Machine;        /* Machine type                  */
  251.     int    Switch;            /* Mother board switch           */
  252.     long    Fdc;            /* Floppy Disk Controler         */
  253.     int    Keyboard;        /* Keyboard type                 */
  254.     int    Language;        /* Current Language              */
  255.     long    Shifter;        /* Video circuit                 */
  256.     int    Sound;            /* Sound System                  */
  257.     int    Fpu;            /* Flotting Point Unit           */
  258.     int    Separator;        /* Date separator                */
  259.     int    Date;            /* date format                   */
  260.     int    Time;            /* time format                   */
  261.     /* Version extract from system's call                            */
  262.     int    TosVersion;        /* 0 Si Magic présent            */
  263.     int    GemdosVersion;        /* Inverser octet fort et faible */
  264.     int    AesVersion;         /* Version de l'AES              */
  265.     /* Calculate from Cookie "MiNT"                                  */
  266.     int    MultiTosVersion;    /* Version de Multitos           */
  267.     /* Présence de Magic                                             */
  268.     int    Magic;            /* Vrai si Magic Présent         */
  269. } MachineInfo;
  270.  
  271.     Liste des constantes prédéfinies :
  272.  
  273. #define    M68000        0x0000            /* Processeurs */
  274. #define    M68010        0x000A
  275. #define    M68020        0x0014
  276. #define    M68030        0x001E
  277.  
  278. #define    ST        0x00000L        /* Machines */
  279. #define    STE        0x10000L
  280. #define    MSTE        0x10010L
  281. #define    TT        0x20000L
  282. #define    FALCON30    0x30000L
  283.  
  284. #define    KEYB_USA    0x0            /* Clavier */
  285. #define    KEYB_D        0x1
  286. #define    KEYB_F        0x2
  287. #define    KEYB_GB        0x3
  288. #define    KEYB_SP        0x4
  289. #define    KEYB_I        0x5
  290. #define    KEYB_CHD    0x7
  291. #define    KEYB_CHF    0x8
  292.  
  293. #define    LG_USA        0x0            /* Langue */
  294. #define    LG_D        0x1
  295. #define    LG_F        0x2
  296. #define    LG_GB        0x3
  297. #define    LG_SP        0x4
  298. #define    LG_I        0x5
  299. #define    LG_CHD        0x7
  300. #define    LG_CHF        0x8
  301.  
  302. #define    SHIFTER_ST    0x00000L        /* Circuit Video */
  303. #define    SHIFTER_STE    0x10000L
  304. #define    SHIFTER_TT    0x20000L
  305. #define    VIDEL_FALCON    0x30000L
  306.  
  307. #define    MATRICE        0x08            /* Systeme sonore */
  308. #define    DSP        0x04
  309. #define    CODEC        0x02
  310. #define    PSG        0x01
  311.  
  312. #define    NO_FPU        0            /* Copro. Math. */
  313. #define    SFP004        1
  314. #define    C68881_2    2
  315. #define    C68881_2_SFP    3
  316. #define    C68881        4
  317. #define    C68881_SFP    5
  318. #define    C68882        6
  319. #define    C68882_SFP    7
  320. #define    C68040        8
  321. #define    C68040_SFP    9
  322.  
  323. #define    DATE_MJA    0            /* Format date */
  324. #define    DATE_JMA    1
  325. #define    DATE_AMJ    2
  326. #define    DATE_AJM    3
  327.  
  328. #define    TIME_12        0            /* Format horaire */
  329. #define    TIME_24        1
  330.  
  331.     Voir test.c pour un exemple d'utlisation.
  332.  
  333.     * CurWindow contient le code de l'objet WindGem en cours
  334. d'utilisation. (voir test.c)
  335.  
  336.     * AdrMenu est une variable de type OBJECT contenant l'adresse de
  337. l'objet menu de l'application.
  338.  
  339.     * AdrDesk est une variable de type OBJECT contenant l'adresse de 
  340. l'objet bureau de l'application.
  341.  
  342.     
  343. 5.3> Fonctions de la librairie
  344.  
  345. 5.3.1> AjouteAide
  346.  
  347. < void AjouteAide (arbre, objet, txt) >
  348.  
  349. * int arbre..................... Numéro de l'arbre d'objets
  350. * int objet..................... Numéro de l'objet
  351. * char *txt..................... Chaine contenant le message
  352.  
  353.     Cette fonction permet d'associer un message d'aide <txt> à un objet
  354. <objet> d'un formulaire <arbre>.
  355.     Vous avez le droit à 3 lignes de textes de 40 car. au maximum.
  356.  
  357.     Pour indiquer un changement de ligne dans la chaine <txt>, utiliser
  358. le caractère '|' comme pour la fonction <form_alert> du GEM.
  359.  
  360. Ex :
  361.     AjouteAide (FORM1, BOUTON1, "Bouton1|test|test")
  362.  
  363.  
  364. 5.3.2> AjouteMenu
  365.  
  366. < void AjouteMenu (numObj, menu, mode, wmenu) >
  367.  
  368. * int numObj.................... Numéro de l'objet (arbre d'objet ou numéro
  369.                                  retourner par une fonction d'init. d'une
  370.                                  quelconque autre fenêtre.
  371. * int menu...................... Numéro de l'arbre d'objets du menu > 0
  372. * int mode...................... REDRAW -> réaffichage dynamique,
  373.                                  NODRAW -> pas de réaffichage immédiat.
  374. * void (*wmenu)(int opt)........ Fonction de gestion du menu en fenêtre.
  375.  
  376.     Cette fonction permet d'ajouter un menu (dynamiquement ou non) dans
  377. une fenêtre d'un type quelconque.
  378.     Le mode permet de forcer un redraw ou non de la fenêtre.
  379.  
  380.  
  381. 5.3.3> AjoutePopup
  382.  
  383. < void AjoutePopup (arbre, objet, ArbrePopup) >
  384.  
  385. * int arbre..................... Numéro de l'arbre d'objets considéré
  386. * int objet..................... Objet de type étendu POPUP_B concerné
  387. * int ArbrePopup................ Numéro de l'arbre d'objet qui sert de Popup
  388.  
  389.     Cete fonction permet d'associer un popup menu à un objet donné d'un
  390. arbre donné. Ensuite, tout est géré automatiquement par WindGem.
  391. Un objet Userdef est dessiné à la place et un icône est ajouté à la droite
  392. de l'objet.
  393.  
  394. Fonctionnement : 
  395.     - un clic sur l'objet (zone texte) et le popup menu est affiché et
  396.     géré comme auparavant,
  397.     - un clic sur l'icône et l'option suivante est affichée dans la 
  398.     zone texte.
  399.     
  400.     Il n'est plus nécessaire d'utiliser la fonction pop_up.
  401.  
  402.  
  403. 5.3.4> AjouteToolBar
  404.  
  405. < void AjouteToolBar (numObj, toolbar, mode, wtoolbar) >
  406.  
  407. * int numObj.................... Numéro de l'objet (arbre d'objet ou numéro
  408.                                  retourner par une fonction d'init. d'une
  409.                                  quelconque autre fenêtre.
  410. * int toolbar................... Numéro de l'arbre d'objets ToolBar > 0
  411. * int mode...................... REDRAW -> réaffichage dynamique,
  412.                                  NODRAW -> pas de réaffichage immédiat.
  413. * void (*wtoolbar)(int opt)..... Fonction de gestion de la ToolBar.
  414.  
  415.     Cette fonction permet d'ajouter une ToolBar (dynamiquement ou non) 
  416. dans une fenêtre d'un type quelconque.
  417.     Le mode permet de forcer un redraw ou non de la fenêtre.
  418.  
  419.  
  420. 5.3.5> AppInit
  421.  
  422. < void AppInit(fic_rsc, desk, gereDesk, menu, gereMenu) >
  423.  
  424. * char *fic_rsc................. Nom du fichier Ressource avec ou sans .rsc
  425. * int desk...................... Numéro de l'objet pour le bureau
  426. * void (*gereDesk)(int event)... Fonction de gstion du bureau
  427. * int menu...................... Numéro de l'objet pour le menu
  428. * void (*gereMenu)(int event)... Fonction de gestion du menu
  429.  
  430.     Cette fonction permet d'initialiser le Gem et tous les paramètres
  431. nécessaires à la librairie ainsi que les variables systèmes nécessaires à
  432. WindGem.
  433.  
  434. Nouveauté décembre 1996 :
  435.  
  436.     Il est maintenant possible de charger le fichier ressource en 
  437. fonction du langage de l'ordinateur.
  438.     Pour ce faire, il suffit que le paramètre <fic_rsc> ne contienne
  439. pas l'extension .rsc, le programme ajoute automatiquement à la fin du nom :
  440.  
  441.     * F.rsc pour le francais ou le suisse français,
  442.     * E.rsc pour l'anglais ou l'américain,
  443.     * D.rsc pour l'allemand ou le suisse allemand,
  444.     * I.rsc pour l'Italien,
  445.     * S.rsc pour l'espagnol.
  446.  
  447.     Par défaut si la langue était "exotique" (autre langue non reconnue
  448. par WindGem), c'est l'anglais qui serait automatiquement choisi.
  449.  
  450.     Attention, la taille du paramètre fic_rsc n'est pas vérifiée, cela
  451. signifie que pour un système n'admettant pas les noms longs (je n'est pas
  452. encore Magic 5 mais je compte l'acquérir bientôt), le programmeur doit
  453. veiller à ce que le nom de fichier passé en paramètre ne dépasse pas 7 car.
  454.  
  455.  
  456. 5.3.6> AppExit
  457.  
  458. < void AppExit(void) >
  459.  
  460.     Cette fonction permet de terminer l'application en fermant les
  461. fenêtres qui resteraient ouvertes et en les détruisant, rendant ainsi 
  462. l'espace mémoire utilisé au système.
  463.  
  464.  
  465. 5.3.7> EffaceChamp
  466.  
  467. < void EffaceChamp (arbre, objet) >
  468.  
  469. * int arbre..................... Numéro de l'arbre d'objet considéré
  470. * int objet..................... Numéro de l'objet dont il faut effacer le
  471.                                  contenu.
  472.  
  473.     Cette fonction permet d'effacer le contenu d'un objet d'un arbre
  474. d'objets donné.
  475.  
  476.  
  477. 5.3.8> EnleveMenu
  478.  
  479. < void EnleveMenu (numObj, mode) >
  480.  
  481. * int numObj.................... Numéro WindGem de l'objet
  482. * int mode...................... REDRAW : réaffichage
  483.                                  NODRAW : pas de réaffichage
  484.  
  485.     Cette fonction permet d'enlever dynamiquement ou non un menu associé
  486. à un objet WindGem (formulaire, fenêtre texte, fenêtre User...).
  487.  
  488.  
  489. 5.3.9> EnleveToolBar
  490.  
  491. < void EnleveToolBar (numObj, mode) >
  492.  
  493. * int numObj.................... Numéro WindGem de l'objet
  494. * int mode...................... REDRAW : réaffichage
  495.                                  NODRAW : pas de réaffichage
  496.  
  497.     Cette fonction permet d'enlever dynamiquement ou non une ToolBar
  498. associée à un objet WindGem (formulaire, fenêtre texte, fenêtre User...).
  499.  
  500.  
  501. 5.3.10> EventMulti
  502.  
  503. < int EventMulti (void) > 
  504.  
  505.     C'est la fonction de principale de traitement des événements et de
  506. leur affectation à la bonne fenêtre ou fonction interne.
  507.     Elle doit être employée dans une boucle sans fin, la sortie de
  508. l'application pouvant être gérée à l'aide d'une variable globale.
  509.  
  510.     Elle retourne le type d'événement venant d'être reçu.
  511.  
  512.  
  513. 5.3.11> FormAlert
  514.  
  515. < void FormAlerte(index) >
  516.  
  517. * int index..................... Numéro l'OBJECT contenant le message.
  518.  
  519.     Affiche une boîte d'alerte dont la description se trouve dans le
  520. fichier .RSC
  521.  
  522.  
  523. 5.3.12> GetCoord
  524.  
  525. < void GetCoord (numObj, coord) >
  526.  
  527. * int numObj.................... Numéro de l'objet WindGem.
  528. * GRECT *coord.................. coordonnées de la fenêtre.
  529.  
  530.     Permet de récupérer les coordonnées d'une fenêtre d'un type
  531. quelconque.
  532.     Si l'objet n'existe pas, (GRECT *)NULL est placé dans <coord>.
  533.  
  534.  
  535. 5.3.13> GetHandle
  536.  
  537. < int GetHandle (objet) >
  538.  
  539. * int objet..................... Numéro de l'objet.
  540.  
  541.     Cette fonction retourne le handle d'une fenêtre gérée par WindGem 
  542. ou BLANK si l'objet est inconnu ou qu'il n'a pas de handle.
  543.  
  544.  
  545. 5.3.14> GetObjet
  546.  
  547. < int GetObjet(void) >
  548.  
  549.     Cette fonction à n'utiliser que dans une fonction de gestion d'une
  550. fenêtre permet de retourner le numéro de l'objet EXIT ou TOUCHECIT qui 
  551. vient d'être sélecionné.
  552.  
  553.  
  554. 5.3.15> GetObject
  555.  
  556. < OBJECT *GetObject(arbre) >
  557.  
  558. * int arbre..................... Numéro d'un arbre d'objets
  559.  
  560.     Cette fonction permet de récupérer un pointeur sur la variable de
  561. type OBJECT associée à un arbre <arbre>.
  562.     Elle peut être utile si l'utilisateur désire pouvoir accéder à des 
  563. propriétés particulières des arbres d'objets (par exemple).
  564.  
  565.  
  566. 5.3.16> GetValeur
  567.  
  568. < char *GetValeur(arbre, objet) >
  569.  
  570. * int arbre..................... Numéro de l'arbre d'objets considéré
  571. * int objet..................... Numéro de l'objet dont on veut le contenu
  572.  
  573.     Cette fonction permet de récupérer le contenu de la zone texte d'un
  574. objet quelconque d'un formulaire.
  575.  
  576.  
  577. 5.3.17> GetVar 
  578.  
  579. < void *GetVar (numObj) >
  580.  
  581. * int numObj.................... Numéro de l'objet WindGem.
  582.  
  583.     Cette fonction retourne la valeur de la variable <var> d'une 
  584. structure WindUser. Var étant un pointeur.
  585.  
  586.  
  587. 5.3.18> GetWindText
  588.  
  589. < int GetWindText (numTxt, ligne, nbcol) >
  590.  
  591. * int numTxt................... Numéro de l'obet WTYPTEXT
  592. * char **ligne[]............... Pointeur sur une table de pointeurs sur les
  593.                                 lignes de texte à inscrire dans la fenêtre.
  594. * int *nbcol................... Pointeur sur un entier contenant le nombre
  595.                                 de colonne max. de la fenêtre.
  596. retourne le nombre de lignes de texte.
  597.  
  598.     Cette fonction permet de récupérer un pointeur sur le texte affiché
  599. dans une fenêtre Texte, la taille de la ligne max. et le nombre de lignes 
  600. de texte.
  601.  
  602.  
  603. 5.3.19> GetWorkXYWH
  604.  
  605. < void GetWorkXYWH (numObj, coord) >
  606.  
  607. * int numObj................... Numéro de l'objet WindGem
  608. * GRECT *coord................. Coordonnées de la zone utilisable.
  609.  
  610.     Cette fonction remplace le wind_get (..., WF_WORKXYWH,...) du GEM.
  611. Elle retourne les coordonnées de la zone utilisable. Si la fenêtre contient
  612. un menu, la hauteur du menu sera soustraite de la zone utilisable.
  613. Il ne faut donc JAMAIS utiliser wind_get s'il y a un menu dans la fenêtre
  614. faute de quoi le menu risque d'être recouvert.
  615.  
  616. ATTENTION : Cette fonction ne fait pas d'allocation mémoire.
  617.  
  618.  
  619. 5.3.20> PopMenu
  620.  
  621. < void PopMenu(numObj, gerePopup)>
  622.  
  623. * int numObj.................... Numéro de l'objet à utiliser
  624. * void (*gerePopup)(int option). Fonction de gestion du popup menu
  625.  
  626.     Cette fonction permet de déclarer un popup menu qui sera appelé
  627. lors de l'appui du bouton DROIT de la souris.
  628. L'option choisie sera envoyé en paramètre à la fonction <gerePopup>.
  629.  
  630.  
  631. 5.3.21> pop_up
  632.  
  633. < void pop_up (arbre, obj, pu) >
  634.  
  635. * int arbre..................... Numéro de l'arbre d'objet
  636. * int obj....................... Objet de l'arbre auquel est lié le popup
  637. * int pu........................ Numéro de l'arbre d'objet du popup
  638.  
  639.     Cette fonction est destinée à la gestion des popup menus.
  640.     La valeur sélectionnée est automatiquement insérée dans la zone de
  641. donnée de l'objet <obj> du formulaire <arbre>.
  642.  
  643.     Cette fonction ne doit plus être utilisée pour le moment.
  644.  
  645. 5.3.22> ObjcUnselect
  646.  
  647. < void ObjcUnselect(arbre, numObj) >
  648.  
  649. * int arbre..................... Numéro de l'arbre d'objets
  650. * in numObj..................... Numéro de l'objet (récupéré avec GetObjet)
  651.  
  652.     Cette fonction permet de désélectionner un objet.
  653.  
  654.  
  655. 5.3.23> SetSlider
  656.  
  657. < void SetSlider (mode, echelle, position, text) >
  658.  
  659. * int mode...................... Mode de fonctionnement
  660. * int echelle................... Valeur max. pouvant être atteinte
  661. * int position.................. position du slider
  662. * char *text.................... Texte à afficher.
  663.  
  664.     Cette fonction permet d'afficher et de gérer un objet Slider.
  665.     Les trois mode de fonctionnement sont :
  666.  
  667.     SLIDINI : initialisation du Slider
  668.         -> fournir echelle, position de départ et texte.
  669.         SetSlider sauve le fond de l'écran et affiche 
  670.         l'objet Slider.
  671.     SLIDAFF : gestion du Slider
  672.         -> fournir position en cours
  673.         Réaffiche l'objet Slider à la position souhaitée.
  674.     SLIDEND : fin d'utilisation
  675.         Réaffiche le fond de l'écran.
  676.  
  677.     Voir test.c pour un exemple d'utilisation.
  678.  
  679.  
  680. 5.3.24> SetValeur
  681.  
  682. < void SetValeur(arbre, objet, valeur) >
  683.  
  684. * int arbre..................... Numéro de l'arbre d'objets
  685. * int objet..................... Numéro de l'objet
  686. * char *valeur.................. Valeur à inscrire
  687.  
  688.     Cette fonction permet d'initialiser la zone texte d'un objet donné
  689. d'un formulaire.
  690.  
  691.  
  692. 5.3.25> SetWindText
  693.  
  694. < SetWindText (numTxt, nblig, nbcol, ligne) >
  695.  
  696. * int numTxt................... Numéro de l'obet WTYPTEXT
  697. * int nblig.................... Nombre de lignes de texte
  698. * int nbcol.................... Taille max. de la plus grande ligne
  699. * char **ligne................. Table de pointeurs sur les lignes de texte 
  700.                                 à inscrire dans la fenêtre.
  701.  
  702.     Cette fonction permet d'associer un texte à une fenêtre de type
  703. WTYPTEXT en lui donnant un pointeur sur chaque ligne du texte à afficher,
  704. le nombre de lignes et la taille de la plus longue ligne.
  705.  
  706.     * Lors de l'utilisation de cette fonction avec une fenêtre dont le
  707. contenu provient d'un fichier texte :
  708.     -> il faut penser à éviter les débordements mémoires qui pourraient
  709. appaître lors de la modification du contenu d'une ligne de texte.
  710.  
  711.     * Dans le cadre d'une fenêtre dont le contenu est géré par
  712. l'utilisateur (paramètre file de WindTextInit NUL), celui-ci doit définir 
  713. la zone mémoire qui contiendra le texte ET un tableau de pointeurs sur 
  714. chacunes des lignes de texte. C'est ce tableau qui est fourni à SetWindText
  715. et récupéré par GetWindText.
  716.     -> penser au problème d'allocation et de libération dynamique de
  717. la mémoire utilisée.
  718.     
  719.     Pour plus d'information, voir le programme d'exemple test.c
  720.  
  721.  
  722. 5.3.26> StGuide
  723.  
  724. < void StGuide(fichierHyp, node) >
  725.  
  726. * char *fichierHyp.............. Nom du fichier d'aide (pas de chemin)
  727. * char *node.................... Node à appeler
  728.  
  729.     Cette procédure permet de lancer ST-GUIDE (qui doit donc être 
  730. lancé en tant qu'accessoire pour Single Tos ou en application pour un
  731. système multi-tache) et de se positionner sur un "noeud" particulier.
  732. (cf exemple dans test.c).
  733.  
  734. REMARQUE : Le fichier d'aide doit se trouver au même niveau d'arborescence
  735. que l'application ou dans un répertoire qui se trouve à un niveau inférieur.
  736. Dans ce cas ajouter le chemin relatif au répertoire de l'application dans
  737. <fichierHyp>.
  738.  
  739.  
  740. 5.3.27> ToolBarSelect
  741.  
  742. < void ToolBarSelect(arbre, numObjc, mode) >
  743.  
  744. * int arbre..................... Numéro de l'objet WindGem.
  745. * int numObjc................... Objet du ToolBar à sélectionner.
  746. * int mode...................... Redessin (REDRAW) ou non (NODRAW).
  747.  
  748.  
  749.     Cette fonction permet de sélectioner un objet d'une ToolBar se
  750. situant dans un objet quelconque WindGem.
  751.  
  752.  
  753. 5.3.28> ToolBarUnselect
  754.  
  755. < void ToolBarUnselect(arbre, numObjc, mode) >
  756.  
  757. * int arbre..................... Numéro de l'objet WindGem.
  758. * int numObjc................... Objet du ToolBar à désélectionner.
  759. * int mode...................... Redessin (REDRAW) ou non (NODRAW).
  760.  
  761.     Cette fonction permet de désélectioner un objet d'une ToolBar se
  762. situant dans un objet quelconque WindGem.
  763.  
  764.  
  765. 5.3.29> WindClose
  766.  
  767. < int WindAlerte (icone, user_icn, texte, bouton, defaut) >
  768.  
  769. * int icone..................... Numéro de l'icône ou ICN_USER
  770. * BITBLK *user_icn.............. Pointeur sur la structure contenant l'image
  771. * char *texte................... Texte du message
  772. * char *bouton.................. Texte des boutons
  773. * int defaut.................... Numéro du bouton défaut de la boîte.
  774.  
  775.     Cette fonction permet d'afficher un message d'alerte, contenant
  776. un titre + cinq autres lignes de texte, chacunes de ces lignes ne devant pas
  777. dépasser 60 caractères, et jusqu'à 4 boutons d'au maximum 20 caractères.
  778.     Le caractère '|' permet de distinguer le texte de chaque ligne ou
  779. de chaque bouton.
  780.     Si <icone> vaut ICN_USER, le champ <user_icn> est utilisé comme
  781. icône.
  782.  
  783.     Cette fonction retourne le numéro du bouton sélectionné (1 à 4).
  784.  
  785.  
  786. 5.3.30> WindClose
  787.  
  788. < void WindClose(numObj) >
  789.  
  790. * int numObj
  791.  
  792.     Cette fonction permet de fermer une fenêtre.
  793.     C'est à ce moment qu'est déclenché l'événement EV_CLOSE qui peut
  794. être traité ou non par l'utilisateur.
  795.  
  796.  
  797. 5.3.31> WindDelete
  798.  
  799. < void WindDelete(numObj) >
  800.  
  801. * int numObj
  802.  
  803.     Cette fonction permet de détruire une fenêtre.
  804.     C'est à ce moment qu'est déclenché l'événement EV_CLOSE qui peut
  805. être traité ou non par l'utilisateur.
  806.  
  807.     Cette fonction a été rendue disponible pour des évolutions futures 
  808. mais n'a pas à être utilisée pour le moment. Toutes les fenêtres étant 
  809. automatiquement détruites à la fin de l'application par AppExit.
  810.  
  811.  
  812. 5.3.32> WindDraw
  813.  
  814. < void WindDraw(arbre, objet) >
  815.  
  816. * int arbre..................... Arbre d'objet considéré
  817. * int objet..................... Objet à redessiner
  818.  
  819.     Cette fonction, écrite par Olivier Landemarre, permet de redessiner
  820. l'objet <objet> dans l'arbre <arbre> que la fenêtre soit TOPPED ou non.
  821.  
  822.  
  823. 5.3.33> WindFormInit
  824.  
  825. < void WindFormInit(numObj, mode, inf_x, inf_y, title, edit, fonct) >
  826.  
  827. * int numObj.................... Numéro de l'arbre d'objets
  828. * int mode...................... Mode d'affichage WNORM ou WMODAL
  829. * int inf_x..................... Position X à l'ouverture ou 0
  830. * int inf_y..................... Position Y à l'ouverture ou 0
  831. * char *title................... Titre de la fenêtre
  832. * int edit...................... Numéro du premier objet éditable ou 0
  833. * void (*fonct)(int evnt));..... Fonction de gestion de la fenêtre
  834.  
  835. La fonction de gestion de la fenêtre doit être organisée comme suit :
  836.  
  837. void gereForm(int evnt)
  838. {
  839.     int choix;
  840.  
  841.     if (evnt == EV_OPEN)
  842.     {
  843.         Traitement à effectuer avant l'ouverture de la fenêtre
  844.     }        
  845.     if (evnt == EV_CLOSE)
  846.     {
  847.         Traitement à effectuer avant la fermeture de la fenêtre
  848.         non disponible pour un formulaire modal.
  849.         ATTENTION : ne pas fermer la fenêtre à ce niveau
  850.     }        
  851.     if (evnt & MU_BUTTON)
  852.     {
  853.         Traitement des événements bouton
  854.     }
  855. }                
  856.  
  857. Note : un événement BUTTON est généré lors de l'utilisation d'un raccourcis
  858. clavier dans un formulaire.
  859.  
  860.  
  861. 5.3.34> WindOpen
  862.  
  863. < void WindOpen(numObj) >
  864.  
  865. * int numObj.................... Numéro de l'arbre d'objet à ouvrir
  866.  
  867.     Cette fonction permet d'ouvrir une fenêtre.
  868.     C'est à ce moment qu'est déclenché l'événement EV_OPEN qui peut
  869. être traité ou non par l'utilisateur.
  870.  
  871.  
  872. 5.3.35> WindTextInit
  873.  
  874. < int WindTextInit (file, Fpos, title) >
  875.  
  876. * char *file.................... Nom du fichier texte,
  877. * GRECT *Fpos................... Coordonnée de départ de la fenêtre Texte,
  878. * char *title................... Titre optionnel de la fenêtre.
  879.  
  880.     Initialisation et ouverture du'une fenêtre texte.
  881.  
  882.     Un appui sur <escape> permet de fermer la fenêtre et le défilement
  883. du texte peut être contrôlé par les touches fléchées. Appuyer sur <HELP> 
  884. pour de plus amples informations.
  885.     Cette fonction retourne le numéro associé à la fenêtre Texte
  886. nouvellement créée.
  887.     
  888.     NOTE : Actuellement, la fenêtre est détruite à la fermeture si on
  889.     utilise le bouton Close de la fenêtre !
  890.                ------------
  891.     Maintenant il est possible de modifier le contenu de la fenêtre à
  892. l'aide des fonctions GetWindText et SetWindText.
  893.  
  894.  
  895. 5.3.36> WindUserInit
  896.  
  897. < int WindUserInit (attrib, pos, title, init, exit, message, clavier, 
  898.                     souris, var) >
  899.  
  900. * int attrib.................... Attributs de la fenêtre.
  901. * GRECT pos..................... Coordonnées de départ de la fenêtre.
  902. * char *title................... Titre de la fenêtre.
  903. * void (*init)()................ Fonction d'initilisation (ouverture).
  904. * void (*exit)()................ Fonction de libération   (fermeture).
  905. * void (*message)(int evnt, int buff[8])
  906.                                  Gestion des événements MU_MESAG.
  907. * void (*clavier)(int kbd, int key)
  908.                                  Gestion des événements MU_KEYBD.
  909. * void (*souris)(int x, int y, int k, int nb)
  910.                                  Gestion des événements MU_BUTTON.
  911. * void *var..................... Ptr sur une structure utilisateur.
  912.  
  913.     Cette fonction permet d'initialiser une fenêtre "Utilisateur" 
  914. d'attributs <attrib> donnés.
  915.     De fait il faut fournir un ensemble de fonctions qui permettront de
  916. gérer les événements qui lui seront envoyées par le système (<message>, 
  917. <clavier>, <souris>) de préparer l'ouverture (<init>) et la fermeture de 
  918. la fenêtre (<exit>). Toutes ces fonctions peuvent êtres NULLes.
  919.     <var> permet de contenir un ensemble de variables que l'utilisateur
  920. voudra joindre à sa fenêtre pour ses besoins.
  921.  
  922.     Cette fonction retourne le numéro associé à la fenêtre Utilisateur
  923. nouvellement créée.
  924.  
  925.     ATTENTION : NE PAS PERDRE CE NOMBRE SINON IL N'EST PLUS POSSIBLE
  926. D'OUVRIR OU DE FERMER CETTE FENETRE (sauf à la fin de l'application) !!
  927.  
  928.  
  929. Traitement des événements :
  930.     - Les événements MU_KEYBD sont décomposés en événements MU_KEYBD et
  931. MU_MESAG dans le cas de l'appui sur l'une des touches spéciales.
  932.     WindGem fournit daux paramètres :
  933.     * kbd : touches mortes utilisées (SHIFTs, CONTROL, ALTERNATE...).
  934.     * key : code SCAN + ASCII de la touche enfoncée.
  935.     
  936.     - Les événements MU_BUTTON sont renvoyés à l'utilisateur par 
  937. l'intermédiaire de plusieurs paramètres :
  938.     * x, y, k : Position de la souris et bouton(s) appuyés.
  939.     * nb : nombre de clics.
  940.     
  941.     - Les événements MU_MESAG sont pré-traités par WindGem et plus
  942. particulièrement dans la fonction WindUserDo du module GemUser.C
  943.     * WM_REDRAW : si la fenêtre contient un menu, son réaffichage est
  944. effectué automatiquement et les coordonnées de la zone à redessiner sont
  945. modifiées pour que l'utilisateur ne risque pas de couvrir le menu au cours
  946. de son redessin. L'événement est renvoyé à l'utilisateur.
  947.     * WM_TOPPED : Traitement automatique. L'événement n'est pas envoyé
  948. à l'utilisateur.
  949.     * WM_CLOSED : Traitement automatique par appel à la fonction 
  950. WindClose, non sans avoir au préalable exécuté la fonction exit définie par
  951. l'utilisateur. L'événement n'est pas envoyé à l'utilisateur.
  952.     * WM_MOVED  : Traitement automatique. L'événement est renvoyé à
  953. l'utilisateur pour qu'il puisse effectuer un traitement personnalisé.
  954.     * WM_SIZED  : Traitement automatique. L'événement est renvoyé à
  955. l'utilisateur pour qu'il puisse effectuer un traitement personnalisé.
  956.     * WM_FULLED : Traitement automatique. L'événement est renvoyé à 
  957. l'utilisateur pour qu'il puisse effectuer un traitement personnalisé.
  958.     * WM_ICONIFY : L'iconification et le redessin son traités par 
  959. WindUserDo sans renvoi de l'événement à l'utilisateur.
  960.     * WM_UNICONIFY : La désiconification est traités par WindUserDo. 
  961. Le redessin suivant est renvoyé à l'utilisateur pour qu'il le traite.
  962.     
  963.     En paramètre, l'utilisateur reçoit toujours :
  964.     * evnt : Le type de l'événement.
  965.     * buff : le tableau d'entier renvoyé par evnt_multi du GEM. Pour
  966. la signification de son contenu, se référer à la documentation GEM.
  967.  
  968.  
  969. 5.3.37> wmenu_icheck
  970.  
  971. < void wmenu_icheck (numObj, obj, etat) >
  972.  
  973. * int numObj.................... Numéro de l'objet WindGem (fomulaire, 
  974.                                  texte...).
  975. * int obj....................... Numéro de l'objet dans le menu.
  976. * int etat...................... 0 désactive, 1 active.
  977.  
  978.     Cette fonction est l'équivalente de menu_icheck du GEM et permet
  979. donc d'inverser l'état d'une option d'un menu en fenêtre.
  980.  
  981.  
  982. 5.4> Fonctions utilitaires diverses
  983.  
  984. 5.4.1> convdate
  985.  
  986. < void convdate (date, fdate) >
  987.  
  988. * char *date.................... Date sous forme d'une chaîne de caractères
  989. * unsigned int *fdate........... Date de type fichier
  990.  
  991.     Convertit une chaîne de caractères en format date.
  992.  
  993.  
  994. 5.4.2> cre_fichier
  995.  
  996. < void cre_fichier(chemin, fic, fichier) >
  997.  
  998. * char *chemin.................. Path
  999. * char *fic..................... fichier 12.3
  1000. * char *fichier................. Chaine résultante
  1001.  
  1002.     Crée un nom de fichier par concaténation d'un PATH et d'un nom de
  1003. fichier.
  1004.  
  1005.  
  1006. 5.4.3> EnvoiRedraw
  1007.  
  1008. < void EnvoiRedraw(handle, x, y, w, h) >
  1009.  
  1010. * int handle.................... Handle de la fenêtre
  1011. * int x,y,w,h................... Coordonnées de la zone à redessiner
  1012.  
  1013.     Cette fonction permet d'envoyer un signal de redraw à une fenêtre.
  1014.     Le handle d'une fenêtre peut être obtenu avec la fonction GetHandle.
  1015.  
  1016.  
  1017. 5.4.4> exist
  1018.  
  1019. < long exist (name, att) >
  1020.  
  1021. * name.......................... Nom du fichier
  1022. * att........................... Attribut
  1023.  
  1024.     Teste l'existence d'un fichier. Si celui-ci existe retourne sa 
  1025. longueur ou TRUE si c'est un répertoire.
  1026.  
  1027.  
  1028. 5.4.5> extention
  1029.  
  1030. < void extension (filename, ext) >
  1031.  
  1032. * char *filename................ Nom du fichier
  1033. * char *ext..................... Extention
  1034.  
  1035.     Change l'extention d'un fichier <filename> par <ext>
  1036. ATTENTION : <ext> doit contenir le '.'
  1037.  
  1038.  
  1039. 5.4.6> get_text
  1040.  
  1041. < char *get_text (adr, object) >
  1042.  
  1043. * OBJECT *adr................... Arbre d'objets
  1044. * int object.................... Numéro d'un objet
  1045.  
  1046.     Cette fonction permet de récupérer le contenu de la zone texte d'un
  1047. objet quelconque d'un formulaire.
  1048.  
  1049.  
  1050. 5.4.7> GetCharSize
  1051.  
  1052. < void GetCharSize (Wchar, Hchar) >
  1053.  
  1054. * int *Wchar.................... Largeur d'un caractère
  1055. * int *Hchar.................... Hauteur d'un caractère
  1056.  
  1057.     Cette fonction retourne les dimensions de la police de caractères
  1058. employée par l'AES. Voir la fonction graf_handle de l'AES.
  1059.  
  1060.  
  1061. 5.4.8> GetDeskXYWH
  1062.  
  1063. < void GetDeskXYWH (Xdesk, Ydesk, Wdesk, Hdesk) >
  1064.  
  1065. * int *Xdesk.................... Position X du bureau (normalement 0)
  1066. * int *Ydesk.................... Position Y du bureau (normalement 0)
  1067. * int *Wdesk.................... Largeur du bureau.
  1068. * int *Hdek..................... Hauteur du bureau.
  1069.  
  1070.     Cette fonction retourne les dimensions du bureau GEM.
  1071.  
  1072.  
  1073. 5.4.9> GetVideoRes
  1074.  
  1075. < void GetVideoRes (Xres, Yres, Nplane) >
  1076.  
  1077. * int *Xres..................... Résolution en X de l'écran
  1078. * int *Yres..................... Résolution en Y de l'écran
  1079. * int *Nplane................... Nombre de plans de couleurs
  1080.  
  1081.     Cette fonction renvoie les dimensions de l'écran vidéo et sa 
  1082. profondeur. Ces paramètres sont normalement obtenus avec v_opnvwk et
  1083. vq_extnd.
  1084.  
  1085.  
  1086. 5.4.10> litdate
  1087.  
  1088. < void litdate (dat, fdate) >
  1089.  
  1090. * char *dat..................... chaine qui contiendra la date
  1091. * unsigned int fdate............ ZERO = retourne la date systeme
  1092.                   <> ZERO = retourne fdate sous forme de date
  1093.  
  1094.     Retourne la date système ou d'un fichier sous la forme d'une
  1095. chaîne de caractères.
  1096.  
  1097.  
  1098. 5.4.11> Sauvegarde / Restauration d'une zone de l'écran
  1099.  
  1100. < void get_bkgr (of_x, of_y, of_w, of_h, img) >
  1101. < void put_bkgr (of_x, of_y, of_w, of_h, img) >
  1102.  
  1103. * int of_x...................... Position X de la zone à copier
  1104. * int of_y...................... Position Y
  1105. * int of_w...................... Largeur
  1106. * int of_h...................... Hauteur
  1107. * MFDB *img..................... Variable qui va contenir l'image
  1108.  
  1109.     Sauvegarde puis restauration d'une portion d'écran.
  1110.  
  1111.  
  1112. 5.4.12> selector
  1113.  
  1114. < int selector (chemin, ext, file, title) >
  1115.     
  1116. * char *chemin.................. Path
  1117. * char *ext..................... Extention
  1118. * char *file.................... Nom du fichier
  1119. * Char *title................... Titre pour sélecteur de fichier
  1120.  
  1121.     Appelle et gère le sélecteur de fichier. Retourne ne chemin et le
  1122. nom du fichier.
  1123.  
  1124.  
  1125. 5.4.13> set_text
  1126.  
  1127. < void set_text (adr, object, string) >
  1128.  
  1129. * OBJECT *adr................... Arbre d'objets
  1130. * int object.................... Numéro d'un objet
  1131. * char *string.................. Valeur à inscrire
  1132.  
  1133.     Cette fonction permet d'initialiser la zone texte d'un objet donné
  1134. d'un formulaire.
  1135.  
  1136.  
  1137. 5.4.14> strcomplete
  1138.  
  1139. < char *strcomplete (chaine, lng, car, sens) >
  1140.  
  1141. * char *chaine.................. Chaine à compéter
  1142. * int lng....................... Longueur à atteindre
  1143. * char car...................... Caractère à utiliser pour la compléter
  1144. * char sens..................... INS_AVANT / INS_APRES
  1145.  
  1146.     Insère avant (INS_AVANT) ou après (INS_APRES) autant de <car> que
  1147. nécessaire pour avoir une chaine de taille <lng>
  1148.  
  1149.  
  1150. 5.4.15> strcopy
  1151.  
  1152. < char *strcopy(res, chaine, deb, fin) >
  1153.  
  1154. * char *res..................... Chaine résultante
  1155. * char *chaine.................. Chaine à recopier
  1156. * int deb....................... Position de début de la copie dans chaine
  1157. * int fin....................... Position de fin de la copie
  1158.  
  1159.     Copie <chaine> dans <res> de la position <deb> à la position <fin>.
  1160.  
  1161.     Retourne res ou (char *)NULL si un problème est rencontré.
  1162.     (ex. deb > fin).
  1163.     
  1164.  
  1165. 5.4.16> strinsert
  1166.  
  1167. < char *strinsert (chaine, ch) >
  1168.  
  1169. * chaine........................ Chaine de base
  1170. * ch............................ Chaine à insérer
  1171.  
  1172.     Insert <ch> avant la chaine <chaine>.
  1173.     Retourne le résultat.
  1174.     ATTENTION : chaine doit être suffisamment longue pour contenir le
  1175.     résultat et ne pas dépasser 256 caractères.
  1176.  
  1177.  
  1178. 5.4.17> strleft
  1179.  
  1180. < char *strleft (res, chaine, nb) >
  1181.  
  1182. * char *res..................... Chaine résultante
  1183. * char *chaine.................. Chaine de départ
  1184. * int nb........................ Nombre de caractères à traiter
  1185.  
  1186.     Cette fonction permet de copier dans <res> les <nb> caractères de
  1187. gauche de <chaine>. <res> est retourné par la fonction.
  1188.     Elle fait appel à la fonction strcopy.
  1189.     
  1190.  
  1191. 5.4.18> strmid
  1192.  
  1193. < char *strmid (res, chaine, deb, nb) >
  1194.  
  1195. * char *res..................... Chaine résultante
  1196. * char *chaine.................. Chaine de départ
  1197. * int deb....................... position de départ
  1198. * int nb........................ Nombre de caractères à traiter
  1199.  
  1200.     Cette fonction permet de copier dans <res> <nb> caractères à partir
  1201. de la position <deb>. <res> est retourné par la fonction.
  1202.     Elle fait appel à la fonction strcopy.
  1203.  
  1204.  
  1205. 5.4.19> strnpcpy
  1206.  
  1207. < char *strnpcpy(dest, start, stop) >
  1208.  
  1209. * char *dest.................... Chaine résultante
  1210. * char *start................... Chaine de départ
  1211. * char *stop.................... Chaine de fin
  1212.  
  1213.     Fonction de bibliotheque : Copie dans "dest" la portion de chaine a
  1214. partir du pointeur "start", jusqu'au caractere place juste avant le 
  1215. pointeur "stop". "start" et "stop" doivent obligatoirement pointer dans la 
  1216. meme chaine. Dans tous les cas "dest" est terminee par le caractere de fin 
  1217. de chaine '\0'.
  1218.  
  1219.     Elle remplace la fonction <strpcpy> du sozobonX qui ne marche pas
  1220. correctement.
  1221.  
  1222.  
  1223. 5.4.20> strright
  1224.  
  1225. < char *strright (res, chaine, nb) >
  1226.  
  1227. * char *res..................... Chaine résultante
  1228. * char *chaine.................. Chaine de départ
  1229. * int nb........................ Nombre de caractères à traiter
  1230.  
  1231.     Cette fonction permet de copier dans <res> les <nb> caractères de
  1232. droite de <chaine>. <res> est retourné par la fonction.
  1233.     Elle fait appel à la fonction strcopy.
  1234.     
  1235.  
  1236. 5.4.21> trim
  1237.  
  1238. < char *trim (str) >
  1239.  
  1240. * char *str..................... Chaine à traitée
  1241.  
  1242.     Supprime les espaces inutiles en début et fin de chaîne.
  1243.  
  1244.  
  1245. 5.5> Conclusion
  1246.  
  1247.     Voilà, c'est fini pour l'instant. Vous avez vu , c'est pas 
  1248. compliqué à utiliser. Il y a encore peu de fonctionnalité disponibles mais
  1249. de nouvelles sont en cours de préparation, toujours aussi simple à utiliser.
  1250.  
  1251.     Vous trouverez dans l'archive un exemple appelé simplement TEST.
  1252. Il ne sert à rien mais utilise toutes les fonctions précédentes.
  1253. Vous remarquerez cependant que j'envisage d'en faire un programme de gestion
  1254. de bibliohèque personnel. C'est d'ailleur la raison pour laquelle il me
  1255. fallait une librairie GEM étendue.
  1256.  
  1257.  
  1258. <=-----------------------------------------------------------------------=>
  1259. 6> Evolutions futures
  1260.  
  1261.     - gestion simple de l'affichage d'un fichier image dans une 
  1262.     fenêtre (type de fenêtre WTYPGRAP),
  1263.     - rajout de nouveaux objets Userdefs (nouveaux boutons popup, 
  1264.     listbox...),
  1265.     - gestion de la liste des fenêtres actives non préemptives,
  1266.     - Liaison avec ST-GUIDE pour l'aide,
  1267.     - d'autres évolutions en fonction de mon temps et des idées qui me
  1268.     viendront à l'esprit et de celles que vous me soumettrez,
  1269.     - ...
  1270.  
  1271.  
  1272. <=-----------------------------------------------------------------------=>
  1273. 7> Retour
  1274.  
  1275.     Il s'agit pour moi d'un point TRES important. En effet, je ne suis
  1276. pas un spécialiste du GEM et il est clair que mes fonctions ne sont pas
  1277. écrites de la manière la plus optimale possible.
  1278.  
  1279.     Je compte donc sur vous pour me signaler les éventuelles erreurs 
  1280. qui pourraient m'avoir échappé, les éventuelles améliorations à apporter,
  1281. toute idée qui pourrait faire progresser cette librairie.
  1282.  
  1283.  
  1284.     Si mon travail peut servir, ne serait-ce qu'à UN seul utilisateur, 
  1285. mes efforts n'auront pas servi à rien.
  1286.  
  1287.  
  1288.                 Philippe CASTELLA
  1289.  
  1290.  
  1291.  
  1292. Email : pcastell@ifhamy.insa-lyon.fr            (pour encore un an)
  1293. Http  : http://www.insa-lyon.fr/People/AEDI/pcastell    (idem, après ???)
  1294. Snail : 49, rue Jean Jaurès                (de préférence)
  1295.     69740 Genas
  1296.     FRANCE
  1297.  
  1298. (C) 1996 Philippe CASTELLA
  1299.